<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // 封装异步函数  

        function fn1(){ // 返回一个promise对象
            const p  = new Promise(function(resolve,reject){
                const time = Math.floor(Math.random()*4000+1000);
                const timer = setTimeout(()=>{
                    if(time>=3000){
                        clearInterval(time);
                        resolve(time)
                    }
                    else{
                        clearInterval(time);
                        reject(new Error(time));
                    }
                },time);
            });

            return p;
        }

       
        // 夏 买饮料 
        // 杜 买面包  饮料-> 面包
        // 朱 买水果   面包-> 水果
        // 魏 买牛奶   水果-> 牛奶 
        /* 之前的写法 fn()
        .then(res=>{
            console.log('饮料买到了',res);
            return fn()
        })
        .then(res=>{
            console.log('面包买到了',res);
            return fn()
        })
        .then(res=>{
            console.log('水果买到了',res);
            return fn()
        })
        .then(res=>{
            console.log('牛奶买到了',res);
        })
        .catch(err =>{
            console.log(err);
        }) */

        console.log('----------------开始------------------');
        async function fn2(){  // 加了async fn2 就变成了异步函数 
            try{
               const r1 = await fn1(); 
               console.log('饮料买成功了',r1)
            }catch(err){
                // console.log('饮料失败',err.message);
            }

            try{
               const r2 = await fn1(); 
               console.log('面包买成功了',r2)
            }catch(err){
                // console.log('面包失败',err.message);
            }

            try{
               const r3 = await fn1(); 
               console.log('水果买成功了',r3)
            }catch(err){
                // console.log('水果失败',err.message);
            }

            try{
               const r4 = await fn1(); 
               console.log('牛奶买成功了',r4)
            }catch(err){
                // console.log('牛奶失败',err.message);
            }
        }
        // 之前我们用then方法 接收 promise 状态成功的结果  
        // 现在 await promise对象 这种方式接收 
        fn2()

        console.log('----------------结束------------------');



        // 抛出异常 

        // let num1 = 100;
        // num1 += 200;
        // console.log(num1);
        // console.log(num3)// 如果有错误会阻断后边代码的运行
        // console.log(3);
        // console.log(4);
        // console.log(5);

        // try{可能出现错误的代码}catch{如果try中的代码出错会走这里}

        // try {
        //     let num1 = 100;
        //     num1 += 200;
        //     console.log(num1)
        //     console.log(num3);
        //     console.log(3);
        //     console.log(4);
        //     console.log(5);
        // }
        // catch(err){
        //     // 如果try中的代码出错  
        //     // 走到catch这里 
        //     // 错误信息放到对象中 通过err 传递过来 
        //     console.log('出错了','错误信息是',err.message);

        // }

        //  console.log(3);
        // console.log(4);
        // console.log(5);


        // try{可能出现错误的代码}catch(err){如果try中的代码出错,会走到这里}
         // try{可能出现错误的代码}catch(err){如果try中的代码出错,会走到这里}finally{不管try中的代码是否出错 这里的代码一定执行 }


        //   try {
        //     let num1 = 100;
        //     num1 += 200;
        //     console.log(num1)
        //     // console.log(num3);
        //     console.log(3);
        //     console.log(4);
        //     console.log(5);
        // }
        // catch(err){
        //     // 如果try中的代码出错  
        //     // 走到catch这里 
        //     // 错误信息放到对象中 通过err 传递过来 
        //     console.log('出错了','错误信息是',err.message);

        // }
        // finally{
        //     console.log('东风吹战鼓擂,你们爱谁谁');
        // }
    </script>
</body>

</html>